package internal

import "database/sql"

// Statistics 分支子节点数量查询结果
type Statistics struct {
	BranchCount    sql.NullInt64 `db:"direct_branch_count"` // 子分支数量
	SubBranchCount sql.NullInt64 `db:"own_branch_count"`    // 除子代之外的所有分支的总和
	LeafCount      sql.NullInt64 `db:"direct_leaf_count"`   // 子分支所拥有的叶子数量
}

// readNullInt 将 NullInt64 转为 int64
func (s *Statistics) readNullInt(i sql.NullInt64) int64 {
	if i.Valid {
		return i.Int64
	}
	return 0
}

// DirectBranch 子代分支数量
func (s *Statistics) DirectBranch() int64 {
	return s.readNullInt(s.BranchCount)
}

// OwnBranch 拥有的分支数量，包括所有后代分支
func (s *Statistics) OwnBranch() int64 {
	return s.DirectBranch() + s.readNullInt(s.SubBranchCount)
}

// DirectLeaf 直接拥有的叶子的数量
func (s *Statistics) DirectLeaf() int64 {
	return s.readNullInt(s.LeafCount)
}
